LyoKICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgbGV0dGVyICdlJwogKgogKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogKgogKiBnbG1hcmsyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCiAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKICogdmVyc2lvbi4KICoKICogZ2xtYXJrMiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICogZ2xtYXJrMi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICoKICogQXV0aG9yczoKICogIEplc3NlIEJhcmtlcgogKi8KI2luY2x1ZGUgImNoYXJhY3RlcnMuaCIKCnVzaW5nIExpYk1hdHJpeDo6dmVjMjsKCkxldHRlckU6OkxldHRlckUoKQp7CiAgICAvLyBWZXJ0ZXggZGF0YS4uLgogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4wOTU0MzYsIDYuMTkwODcxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjEwNzg4NCwgNi45NzA5NTQpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuNTU2MDE3LCA3LjAyMDc0NykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy4wMjA3NDcsIDcuODY3MjIwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjUxODY3MiwgOC4wMzMxOTUpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuMjY5NzEwLCA4LjUzMTEyMCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC4xNjU5NzUsIDguOTI5NDYxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjMwMjkwNSwgOS4wNjIyNDEpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuMzMxOTUwLCA5LjYyNjU1NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy4yODYzMDcsIDkuMzQ0Mzk4KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjExNjE4MywgOS45NTg1MDcpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuMDA0MTQ5LCA5LjUxMDM3MykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy41MTg2NzIsIDkuOTkxNzAxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjcwNTM5NCwgOS40OTM3NzYpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuMDkxMjg2LCA5LjMxMTIwMykpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi4wNDE0OTQsIDkuMDYyMjQxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjE3ODQyMywgOC41MTQ1MjMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuNDQzOTgzLCA4LjE2NTk3NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMC40ODEzMjgsIDcuNTM1MjcwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjA0NTY0MywgNi45MDQ1NjQpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDAuMTQ5Mzc4LCA2LjA5MTI4NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4wOTU0MzYsIDUuNDEwNzg5KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjQ2NDczMCwgNC4yMzIzNjUpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuMzc3NTkzLCA0LjQ5NzkyNSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS4yNjE0MTEsIDMuMTM2OTMwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjkyNTMxMSwgMy45NTAyMDcpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuMjQwNjY0LCAzLjAzNzM0NCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi41ODkyMTIsIDMuODM0MDI1KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjA4NzEzNywgMy4yNjk3MTApKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuMjM2NTE1LCAzLjg2NzIyMCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy42ODQ2NDcsIDMuODY3MjIwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjg2NzIyMCwgNC40NDgxMzMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuMzk4MzQwLCA1LjEyODYzMSkpOwoKICAgIC8vIEluZGV4IGRhdGEuLi4KICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDExKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CgogICAgLy8gUHJpbWl0aXZlIHN0YXRlIHNvIHRoYXQgdGhlIGRyYXcgY2FsbCBjYW4gaXNzdWUgdGhlIHByaW1pdGl2ZXMgd2Ugd2FudC4KICAgIHVuc2lnbmVkIGludCBjdXJPZmZzZXQoMCk7CiAgICBwcmltVmVjXy5wdXNoX2JhY2soUHJpbWl0aXZlU3RhdGUoR0xfVFJJQU5HTEVfU1RSSVAsIDMzLCBjdXJPZmZzZXQpKTsKICAgIGN1ck9mZnNldCArPSAoMzMgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgIHByaW1WZWNfLnB1c2hfYmFjayhQcmltaXRpdmVTdGF0ZShHTF9MSU5FX1NUUklQLCAzMywgY3VyT2Zmc2V0KSk7Cn0K