LyoKICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgbGV0dGVyICdhJwogKgogKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogKgogKiBnbG1hcmsyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCiAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKICogdmVyc2lvbi4KICoKICogZ2xtYXJrMiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICogZ2xtYXJrMi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICoKICogQXV0aG9yczoKICogIEplc3NlIEJhcmtlcgogKi8KI2luY2x1ZGUgImNoYXJhY3RlcnMuaCIKCnVzaW5nIExpYk1hdHJpeDo6dmVjMjsKCkxldHRlckE6OkxldHRlckEoKQp7CiAgICAvLyBWZXJ0ZXggZGF0YS4uLgogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS42MTg5NDksIDEwLjI2MTA0OCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS4zMjIzNDgsIDkuNDM4ODQ4KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig1LjEyNDYxNCwgMTAuMDMwODMyKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0Ljg2MDk2OCwgOS40ODgxODEpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuODExNTM0LCA5LjkzMjE2OSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy45MzgyMDgsIDkuNDM4ODQ4KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjY1ODA4NCwgOS42ODU1MDkpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuNzg0NzU4LCA4Ljk5NDg2MikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi44MDEyMzYsIDkuMTc1NzQ1KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjk2MDg2NSwgOC4xNzI2NjIpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuMTg2NDA2LCA3Ljc2MTU2MikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4yNTIzMTcsIDYuNTYxMTUxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjU3NjcyNSwgNi42MTA0ODMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDAuOTM5MjM4LCA1LjUyNTE4MCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMC4xNjQ3NzksIDQuODgzODY0KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjg0MDM3MSwgNC44MTgwODkpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDAuMjMwNjkwLCAzLjk2MzAwMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMC45MzkyMzgsIDQuMjQyNTQ5KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjYwOTY4MSwgMy4yNTU5MDkpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuMjY4Nzk1LCAzLjk2MzAwMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4wMjE2MjcsIDMuMDc1MDI2KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjg2MTk5OCwgNC4wNDUyMjEpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuODI5MDQyLCAzLjUzNTQ1NykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi44MTc3MTQsIDQuODE4MDg5KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjE2Mzc0OSwgNC45OTg5NzIpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuOTcxMTY0LCA2LjY0MzM3MSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC4yNjc3NjUsIDYuNzI1NTkxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjY2MzIzNCwgNy42MzAwMTApKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDUuNDA0NzM3LCA5LjczNDg0MCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC42NDY3NTYsIDkuNjY5MDY1KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig1LjEwODEzNiwgOC43MzE3NTcpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuNjc5NzEyLCA4LjYwMDIwNSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC45MjY4NzksIDcuNTY0MjM0KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjM2NjYzMiwgNi42OTI3MDMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuNjYzMjM0LCA1LjM0NDI5NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy44ODg3NzQsIDQuODUwOTc2KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjYzMDI3OCwgNC4wOTQ1NTMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuOTU0Njg2LCAzLjk2MzAwMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC44MjgwMTIsIDMuNzk4NTYxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjE2ODg5OCwgMy4zMjE2ODYpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDUuMTU3NTY5LCAzLjg2NDMzNykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC41MTQ5MzMsIDMuMDkxNDcwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig1LjU1MzAzOCwgNC4wNDUyMjEpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDUuMzA1ODcwLCAzLjYzNDEyMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS45MzIwMjksIDQuMTc2NzczKSk7CgogICAgLy8gSW5kZXggZGF0YS4uLgogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soOSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxMik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxMyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxNSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxOCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxOSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyMik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyMyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyNSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyOCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyOSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzMik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzMyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzNSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzOCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygzOSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0MCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0MSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0Mik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0Myk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg0NCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soOSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQ0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDM1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI5KTsKCiAgICAvLyBQcmltaXRpdmUgc3RhdGUgc28gdGhhdCB0aGUgZHJhdyBjYWxsIGNhbiBpc3N1ZSB0aGUgcHJpbWl0aXZlcyB3ZSB3YW50LgogICAgdW5zaWduZWQgaW50IGN1ck9mZnNldCgwKTsKICAgIHByaW1WZWNfLnB1c2hfYmFjayhQcmltaXRpdmVTdGF0ZShHTF9UUklBTkdMRV9TVFJJUCwgMjgsIGN1ck9mZnNldCkpOwogICAgY3VyT2Zmc2V0ICs9ICgyOCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwogICAgcHJpbVZlY18ucHVzaF9iYWNrKFByaW1pdGl2ZVN0YXRlKEdMX1RSSUFOR0xFX1NUUklQLCAxNywgY3VyT2Zmc2V0KSk7CiAgICBjdXJPZmZzZXQgKz0gKDE3ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CiAgICBwcmltVmVjXy5wdXNoX2JhY2soUHJpbWl0aXZlU3RhdGUoR0xfTElORV9TVFJJUCwgMjgsIGN1ck9mZnNldCkpOwogICAgY3VyT2Zmc2V0ICs9ICgyOCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOwogICAgcHJpbVZlY18ucHVzaF9iYWNrKFByaW1pdGl2ZVN0YXRlKEdMX0xJTkVfU1RSSVAsIDE3LCBjdXJPZmZzZXQpKTsKfQo=