LyoKICogV2luZUZpbGUKICogUG9saXNoIExhbmd1YWdlIFN1cHBvcnQKICoKICogQ29weXJpZ2h0IDIwMDAgTWFydGluIEZ1Y2hzCiAqIENvcHlyaWdodCAyMDAyIFN0ZXZlbiBFZHdhcmRzCiAqIENvcHlyaWdodCAyMDAyIEFsZXhhbmRyZSBKdWxsaWFyZAogKiBDb3B5cmlnaHQgMjAwNCBQaW90ciBDYWJhbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1BPTElTSCwgU1VCTEFOR19ERUZBVUxUCgovKiBNZW51ICovCgpJRE1fV0lORUZJTEUgTUVOVSBGSVhFRCBJTVBVUkUKewogICAgUE9QVVAgIiZQbGlrIiAgewogICAgICAgIE1FTlVJVEVNICImT3R383J6XHRFbnRlciIsICAgICAgICAgICAgICBJRF9BQ1RJVkFURQogICAgICAgIE1FTlVJVEVNICImUHJ6ZW5pZZwuLi5cdEY3IiwgICAgICAgICAgICBJRF9GSUxFX01PVkUKICAgICAgICBNRU5VSVRFTSAiJktvcGl1ai4uLlx0RjgiLCAgICAgICAgICAgICAgSURfRklMRV9DT1BZCiAgICAgICAgTUVOVUlURU0gIlcgcyZjaG93a3UuLi5cdEY5IiwgICAgICAgICAgIDExOAogICAgICAgIE1FTlVJVEVNICImVXN18Vx0RGVsIiwgICAgICAgICAgICAgICAgICBJRF9GSUxFX0RFTEVURQogICAgICAgIE1FTlVJVEVNICImWm1pZfEgbmF6d+ouLi4iLCAgICAgICAgICAgICAxMDkKICAgICAgICBNRU5VSVRFTSAiVXN0YXdpZSZuaWEuLi5cdEFsdCtFbnRlciIsICAgSURfRURJVF9QUk9QRVJUSUVTCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZLb21wcmVzamEuLi4iLCAgICAgICAgICAgICAgIDExOQogICAgICAgIE1FTlVJVEVNICImRGVrb21wcmVzamEuLi4iLCAgICAgICAgICAgICAxMjAKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlVydWNob20uLi4iLCAgICAgICAgICAgICAgICAgSURfRVhFQ1VURQogICAgICAgIE1FTlVJVEVNICImRHJ1a3VqLi4uIiwgICAgICAgICAgICAgICAgICAxMDIKICAgICAgICBNRU5VSVRFTSAiU2tvamFyei4uLiIsICAgICAgICAgICAgICAgICAgMTAzCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlUmdHfzcnogZm9sZGVyLi4uIiwgICAgICAgICAgIDExMQogICAgICAgIE1FTlVJVEVNICImU3p1a2FqLi4uIiwgICAgICAgICAgICAgICAgICAxMDQKICAgICAgICBNRU5VSVRFTSAiJlphem5hY3ogcGxpa2kuLi4iLCAgICAgICAgICAgMTE2CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiJld5apxjaWVcdEFsdCtYIiwgICAgICAgICAgICAgSURfRklMRV9FWElUCiNlbHNlCiAgICAgICAgTUVOVUlURU0gIiZXeWqcY2llIiwgICAgICAgICAgICAgICAgICAgIElEX0ZJTEVfRVhJVAojZW5kaWYKICAgIH0KCiAgICBQT1BVUCAiJkR5c2siICB7CiAgICAgICAgTUVOVUlURU0gIiZLb3BpdWogZHVzay4uLiIsICAgICAgICAgICAgIDIwMQogICAgICAgIE1FTlVJVEVNICImRXR5a2lldGEgZHlza3UuLi4iLCAgICAgICAgICAyMDIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdHVqIGR5c2suLi4iLCAgICAgICAgICAgSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQogICAgICAgIE1FTlVJVEVNICImU3R383J6IGR5c2sgc3lzdGVtb3d5Li4uIiwgLTEgICAgLypUT0RPKi8KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZQb2SzuWN6IER5c2sgU2llY2lvd3kiLCAgICAgIElEX0NPTk5FQ1RfTkVUV09SS19EUklWRQogICAgICAgIE1FTlVJVEVNICImT2SzuWN6IER5c2sgU2llY2lvd3kiLCAgICAgICBJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiVWRvc3TqcG5paiBqYWtvLi4uIiwgICAgICAgICAgMjU0CiAgICAgICAgTUVOVUlURU0gIiZOaWUgdWRvc3TqcG5pYWouLi4iLCAgICAgICAgIDI1NQogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJXeWLzciAmZHlza3UuLi4iLCAgICAgICAgICAgICAyNTEKICAgIH0KCiAgICBQT1BVUCAiJkthdGFsb2dpIiAgewogICAgICAgIE1FTlVJVEVNICImTmFzdOpwbnkgcG96aW9tXHQrIiwgICAgICAgICAzMDEKICAgICAgICBNRU5VSVRFTSAiJlJvendp8SBkcnpld29cdCoiLCAgICAgICAgICAgMzAyCiAgICAgICAgTUVOVUlURU0gIlJvendp8SAmd3N6eXN0a29cdFN0cmcrKiIsICAgIDMwMwogICAgICAgIE1FTlVJVEVNICImWndp8SBkcnpld29cdC0iLCAgICAgICAgICAgICAzMDQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiWmF6bmFjeiAmcG9ka2F0YWxvZ2kiLCAgICAgICAgNTA1CiAgICB9CgogICAgUE9QVVAgIiZXaWRvayIgIHsKICAgICAgICBNRU5VSVRFTSAiJkRyemV3byBpIGthdGFsb2dpIiwgICAgICAgICAgNDEzCiAgICAgICAgTUVOVUlURU0gIkQmcnpld28iLCAgICAgICAgICAgICAgICAgICAgIDQxMQogICAgICAgIE1FTlVJVEVNICImS2F0YWxvZ2kiLCAgICAgICAgICAgICAgICAgICA0MTIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlBvs7ljeiIsICAgICAgICAgICAgICAgICAgICAgSURfVklFV19TUExJVAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImTmF6d2EiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX05BTUUKICAgICAgICBNRU5VSVRFTSAiJldzenlzdGtpZSBhdHJ5YnV0eSBwbGlrdSIsICAgSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAogICAgICAgIE1FTlVJVEVNICJXeWJyYW5lICZhdHJ5YnV0eSBwbGlrdS4uLiIsICBJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiUCZvc29ydHVqIGFsZmFiZXR5Y3puaWUiLCAgICAgNDA0CiAgICAgICAgTUVOVUlURU0gIlBvc29ydHVqIHBvICZ0eXBpZSIsICAgICAgICAgIDQwNQogICAgICAgIE1FTlVJVEVNICJSb3ptaWWc5iAmcG8gd2llbGtvnGNpIiwgICAgICA0MDYKICAgICAgICBNRU5VSVRFTSAiJlNvcnR1aiBwbyBkYWNpZSIsICAgICAgICAgICAgNDA3CiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNvcnR1aiBwbyAmLi4uIiwgICAgICAgICAgICAgIElEX1ZJRVdfRklMVEVSCiAgICB9CgogICAgUE9QVVAgIiZPcGNqZSIgIHsKICAgICAgICBNRU5VSVRFTSAiJlBvdHdpZXJkemVuaWUuLi4iLCAgICAgICAgICAgNTAxCiAgICAgICAgTUVOVUlURU0gIiZDemNpb25rYS4uLiIsICAgICAgICAgICAgICAgIElEX1NFTEVDVF9GT05UCiAgICAgICAgTUVOVUlURU0gIiZVc3Rhd2llbmlhIHBhc2thIG5hcnrqZHppLi4uIiwgNTEyCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlBhc2VrICZuYXJ66mR6aSIsICAgICAgICAgICAgIElEX1ZJRVdfVE9PTF9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiUGFzZWsgJmR5c2vzdyIsICAgICAgICAgICAgICAgSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKICAgICAgICBNRU5VSVRFTSAiUGFzZWsgJnN0YXR1c3UiLCAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwogICAgICAgIE1FTlVJVEVNICJQZbNueSAmZWtyYW5cdEN0cmwrU2hpZnQrUyIsICBJRF9WSUVXX0ZVTExTQ1JFRU4KI2VuZGlmCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZabWluaW1hbGl6dWogcHJ6eSBzdGFyY2llIiwgIDUwNAogICAgICAgIE1FTlVJVEVNICJaJmFwaXN6IHVzdGF3aWVuaWEgcHJ6ZWQgemFrb/FjemVuaWVtIiw1MTEKICAgIH0KCgogICAgUE9QVVAgIiZCZXpwaWVjemXxc3R3byIgIHsKICAgICAgICBNRU5VSVRFTSAiJkRvc3TqcC4uLiIsICAgICAgICAgICAgICAgICAgNjA1CiAgICAgICAgTUVOVUlURU0gIiZMb2dvd2FuaWUuLi4iLCAgICAgICAgICAgICAgIDYwNgogICAgICAgIE1FTlVJVEVNICImV7NhnGNpY2llbC4uLiIsICAgICAgICAgICAgICA2MDcKICAgIH0KCiAgICBQT1BVUCAiJk9rbm8iICB7CiAgICAgICAgTUVOVUlURU0gIiZOb3dlIG9rbm8iLCAgICAgICAgICAgICAgICAgIElEX1dJTkRPV19ORVcKICAgICAgICBNRU5VSVRFTSAiJkthc2thZHVquWNvXHRDdHJsK0Y1IiwgICAgICAgSURfV0lORE9XX0NBU0NBREUKICAgICAgICBNRU5VSVRFTSAiJlR5dHWzIHBpb25vd28iLCAgICAgICAgICAgICAgSURfV0lORE9XX1RJTEVfSE9SWgogICAgICAgIE1FTlVJVEVNICJUeXR1syAmcG96aW9tb1x0Q3RybCtGNCIsICAgICBJRF9XSU5ET1dfVElMRV9WRVJUCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKICAgICAgICBNRU5VSVRFTSAiUm96bWllnOYgYXV0b21hdHljem5pZSIsICAgICAgSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgogICAgICAgIE1FTlVJVEVNICJSb3ptaWWc5iAmc3ltYm9sZSIsICAgICAgICAgICBJRF9XSU5ET1dfQVJSQU5HRQogICAgICAgIE1FTlVJVEVNICImT2Scd2llcnpcdEY1IiwgICAgICAgICAgICAgICBJRF9SRUZSRVNICiAgICB9CgogICAgUE9QVVAgIiY/IiAgewogICAgICAgIE1FTlVJVEVNICImVGVtYXR1IHBvbW9jeVx0RjEiLCAgICAgICAgICBJRF9IRUxQCiAgICAgICAgTUVOVUlURU0gIiZTenVrYWouLi4iLCAgICAgICAgICAgICAgICAgIElEX0hFTFAKICAgICAgICBNRU5VSVRFTSAiJlW/eXdhbmllIHBvbW9jeSIsICAgICAgICAgICAgSURfSEVMUF9VU0lORwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImV2luZWZpbGUuLi4iLCAgICAgICAgICAgICAgICBJRF9BQk9VVAojaWZkZWYgX19XSU5FX18KICAgICAgICBNRU5VSVRFTSAiVyZpbmUuLi4iLCAgICAgICAgICAgICAgICAgICAgSURfQUJPVVRfV0lORQojZW5kaWYKICAgIH0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIlVydWNob20iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJlBvbGVjZW5pZToiLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCiAgICBFRElUVEVYVCAgICAgICAgMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKICAgIENPTlRST0wgICAgICAgICAiSmFrbyAmc3ltYm9sIiwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIDEsIDE1OCwgNiwgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFudWx1aiIsIDIsIDE1OCwgMjMsIDQ3LCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUG9tb2MiLCAyNTQsIDE1OCwgNDMsIDQ3LCAxNAp9CgpJRERfU0VMRUNUX0RFU1RJTkFUSU9OIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIld5YvNyIGNlbHUiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewogICAgQ09OVFJPTCAgICAgICAgICIiLCAxMDEsICJTdGF0aWMiLCBTU19TSU1QTEV8U1NfTk9QUkVGSVgsIDMsIDYsIDE2MiwgMTAKICAgIENPTlRST0wgICAgICAgICAiJoxjaWW/a2E6IiwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAogICAgRURJVFRFWFQgICAgICAgIDIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCiAgICBERUZQVVNIQlVUVE9OICAgIk9LIiwgMSwgMTU4LCA2LCA0NywgMTQKICAgIFBVU0hCVVRUT04gICAgICAiQW51bHVqIiwgMiwgMTU4LCAyMywgNDcsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZQcnplZ2y5ZGFqIiwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQoKU1RSSU5HVEFCTEUKewogICAgSURTX0ZPTlRfU0VMX0RMR19OQU1FICAgIldwcm93YWR6YW5pZSB1c3Rhd2ll8SBjemNpb25raSIKICAgIElEU19GT05UX1NFTF9FUlJPUiAgICAgICJCs7lkIHByenkgd3liaWVyYW5pdSBjemNpb25raSIKfQo=