LyoKICogQ29weXJpZ2h0IDIwMDMgTWFyY2VsbyBEdWFydGUKICogQ29weXJpZ2h0IDIwMDQgQW3pcmljbyBKb3PpIE1lbG8KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOCgpJRERfU0VSSUFMVUlDT05GSUcgRElBTE9HIERJU0NBUkRBQkxFIDAsIDAsIDE2MCwgMTU5ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRQpDQVBUSU9OICJQcm9wcmllZGFkZXMgcGFyYSAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICBMVEVYVCAgICAgICAgICJCaXRzIHBvciBzZWd1bmRvIiwgLTEsNSwyMCw1NSwxMAogIENPTUJPQk9YICAgICAgSURDX0JBVUQsIDYwLCAyMCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIExURVhUICAgICAgICAgIlBhcmlkYWRlIiwgLTEsNSw0MCw1NSwxMAogIENPTUJPQk9YICAgICAgSURDX1BBUklUWSwgNjAsIDQwLCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1R8Q0JTX0FVVE9IU0NST0xMfFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgTFRFWFQgICAgICAgICAiQ29udHJvbCBkZSBmbHV4byIsIC0xLDUsNjAsNTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19GTE9XLCA2MCwgNjAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICJCaXRzIGRlIGRhZG9zIiwgLTEsNSw4MCw1NSwxMAogIENPTUJPQk9YICAgICAgSURDX0RBVEEsIDYwLCA4MCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIExURVhUICAgICAgICAgIkJpdHMgZGUgcGFyYWRhIiwgLTEsNSwxMDAsNTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19TVE9QLCA2MCwgMTAwLCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1R8Q0JTX0FVVE9IU0NST0xMfFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgREVGUFVTSEJVVFRPTiAiT0siLCAgICAgSURPSywzMCwxMzgsNTAsMTQKICBQVVNIQlVUVE9OICAgICJDYW5jZWxhciIsIElEQ0FOQ0VMLDg1LDEzOCw1MCwxNAogIC8qIHRoZXNlIHR3byBidXR0b25zIGFyZSBmb3IgdGVzdGluZyBHZXQvU2V0RGVmYXVsdENvbW1Db25maWcgKi8KICAvKiBQVVNIQlVUVE9OICAgICJHZXREZWZhdWx0IiwgSURfR0VUREVGQVVMVCwzMCwxMTUsNTAsMTQgKi8KICAvKiBQVVNIQlVUVE9OICAgICJTZXREZWZhdWx0IiwgSURfU0VUREVGQVVMVCw4NSwxMTUsNTAsMTQgKi8KRU5ECgpMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfUE9SVFVHVUVTRQoKSUREX1NFUklBTFVJQ09ORklHIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxNjAsIDE1OQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IFdTX1ZJU0lCTEUKQ0FQVElPTiAiUHJvcHJpZWRhZGVzIGRlICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgogIExURVhUICAgICAgICAgIkJpdHMgcG9yIHNlZ3VuZG8iLCAtMSw1LDIwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfQkFVRCwgNjAsIDIwLCA5MCwgMzYsIENCU19EUk9QRE9XTkxJU1R8Q0JTX0FVVE9IU0NST0xMfFdTX0JPUkRFUiB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgTFRFWFQgICAgICAgICAiUGFyaWRhZGUiLCAtMSw1LDQwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfUEFSSVRZLCA2MCwgNDAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICJDb250cm9sbyBkZSBmbHV4byIsIC0xLDUsNjAsNTUsMTAKICBDT01CT0JPWCAgICAgIElEQ19GTE9XLCA2MCwgNjAsIDkwLCAzNiwgQ0JTX0RST1BET1dOTElTVHxDQlNfQVVUT0hTQ1JPTEx8V1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICBMVEVYVCAgICAgICAgICJCaXRzIGRlIGRhZG9zIiwgLTEsNSw4MCw1NSwxMAogIENPTUJPQk9YICAgICAgSURDX0RBVEEsIDYwLCA4MCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIExURVhUICAgICAgICAgIkJpdHMgZGUgcGFyYWdlbSIsIC0xLDUsMTAwLDU1LDEwCiAgQ09NQk9CT1ggICAgICBJRENfU1RPUCwgNjAsIDEwMCwgOTAsIDM2LCBDQlNfRFJPUERPV05MSVNUfENCU19BVVRPSFNDUk9MTHxXU19CT1JERVIgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAogIERFRlBVU0hCVVRUT04gIk9LIiwgICAgIElET0ssMzAsMTM4LDUwLDE0CiAgUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCBJRENBTkNFTCw4NSwxMzgsNTAsMTQKICAvKiB0aGVzZSB0d28gYnV0dG9ucyBhcmUgZm9yIHRlc3RpbmcgR2V0L1NldERlZmF1bHRDb21tQ29uZmlnICovCiAgLyogUFVTSEJVVFRPTiAgICAiR2V0RGVmYXVsdCIsIElEX0dFVERFRkFVTFQsMzAsMTE1LDUwLDE0ICovCiAgLyogUFVTSEJVVFRPTiAgICAiU2V0RGVmYXVsdCIsIElEX1NFVERFRkFVTFQsODUsMTE1LDUwLDE0ICovCkVORAo=