LyoqCiAqIEBmaWxlIHB1Yl9mbGFncy5oCiAqIEBicmllZiBmbGFnc7fWx/jX1rbOCiAqCiAqIENvcHlyaWdodCAoQykgMjAyMyBTYW5lY2hpcHMgVGVjaG5vbG9neSBDby4sIEx0ZC4KICogQGF1dGhvciAKICogQGluZ3JvdXAgCiAqIAogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4go6ix2NGho7pHUEx2MiBMaWNlbmNlo6kKICoKICovCgoKI2lmbmRlZiBfUFVCX0ZMQUdTX0gKI2RlZmluZSBfUFVCX0ZMQUdTX0gKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgaGVhZGVyIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNybyBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKgogKiBAYnJpZWYg1NpmbGFnc7fWx/jA78ar0sa12Na3CiAqLwojZGVmaW5lCUZMQUdTX01BR0lDICgweDQ2NEM0MTQ3VUwpCgojZGVmaW5lCURVQUxTWVNURU1fU1RBVFVTX0JPT1RBQkxFCQkoMHhCMEFCKQkvKiC/ycb0tq8gKi8KI2RlZmluZQlEVUFMU1lTVEVNX1NUQVRVU19TVUNDRVNTRlVMCSgweDVDQ0YpCS8qIMTcs8m5psb0tq8gKi8KI2RlZmluZQlEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFCSgweEJBQkUpCS8qILK7v8nG9LavICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgZGVmaW5pdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgaW50IHN0YXR1czsgICAgIC8qIGJvb3RhYmxlL3N1Y2Nlc3NmdWwvdW5ib290YWJsZSAqLwogICAgaW50IHRyeV9jbnQ7Cn0gVF9EdWFsU3lzdGVtX1N0YXR1czsKCnR5cGVkZWYgZW51bQp7CiAgICBEVUFMX1NZU1RFTSAgPSAweDg3NUEsICAgLyogtdrSu7j2z7XNsyAqLwogICAgRFVBTF9TWVNURU0yID0gMHg5ODZCLCAgIC8qILXatv649s+1zbMgKi8KfSBUX0JPT1RfVEFSR0VUOwoKLyogy6vPtc2zwODQzSAqLwp0eXBlZGVmIGVudW0KewogICAgRFVBTFNZU1RFTV9SRUNPVkVSWSA9IDB4NzU3NSwgICAgICAgICAgLyogbm9ybWFsLXJlY292ZXJ5y6vPtc2zICovCiAgICBEVUFMU1lTVEVNX0FBICAgICAgID0gMHhBQUFBLCAgICAgICAgICAvKiBBQcurz7XNsyAqLwogICAgRFVBTFNZU1RFTV9BQiAgICAgICA9IDB4QUJBQiAgICAgICAgICAgLyogQULLq8+1zbMgKi8KfSBUX0JPT1RfRFVBTFNZU1RFTV9UWVBFOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgVF9CT09UX1RBUkdFVAkJCWJvb3RfdG87ICAgICAgICAvKiC1scewxvS2r8+1zbOx6ta+Ki8KICAgIHVuc2lnbmVkIGludAkJCWZvdGFfc3RhdHVzOyAgICAvKiBmb3Rh17TMrCAqLwogICAgVF9EdWFsU3lzdGVtX1N0YXR1cwkJc3lzdGVtOyAgICAgICAgIC8qILXa0ru49s+1zbPXtMysICovCiAgICBUX0R1YWxTeXN0ZW1fU3RhdHVzCQlzeXN0ZW0yOyAgICAgICAgLyogtdq2/rj2z7XNs9e0zKwgKi8KfSBUX0JPT1RfRk9UQV9GTEFHOwoKdHlwZWRlZiBzdHJ1Y3QKewogICAgVF9CT09UX0RVQUxTWVNURU1fVFlQRSBkdWFsc3lzX3R5cGU7ICAvKiDLq8+1zbPA4NDNICovCiAgICBjaGFyIHN5c3RlbV9ib290X2VudlsxMjhdOwogICAgY2hhciBzeXN0ZW0yX2Jvb3RfZW52WzEyOF07Cn0gVF9CT09UX0VOVjsKCnR5cGVkZWYgc3RydWN0CnsKCWludCAgZnNfc3RhdHVzOyAgLyogzsS8/s+1zbPS7LOjserKtiAqLwoJY2hhciBmc19tdGRfbmFtZVsxNl07CgljaGFyIGZzX3ViaV92b2xfbmFtZVsxNl07Cn0gVF9VQklGU19TVEFUVVM7Cgp0eXBlZGVmIHN0cnVjdAp7Cgl1bnNpZ25lZCBpbnQgbWFnaWNfc3RhcnQ7ICAvKiDK/b7d09DQp9DUxKfK9dfWICovCgkKICAgIFRfQk9PVF9GT1RBX0ZMQUcgCWJvb3RfZm90YV9mbGFnOwogICAgVF9CT09UX0VOViAJCQlib290X2VudjsKCVRfVUJJRlNfU1RBVFVTCQl1Ymlmc19zdGF0dXM7CgoJY2hhciByZXNlcnZlWzE4NF07CgkKCXVuc2lnbmVkIGludCBtYWdpY19lbmQ7ICAvKiDK/b7d09DQp9DUxKfK9dfWICovCn0gVF9GTEFHU19JTkZPOwoKCiNlbmRpZiAvLyBfUFVCX0ZMQUdTX0gKCg==