LyoKICogQ29weXJpZ2h0IDIwMDQgSGFqaW1lIFNlZ2F3YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0pBUEFORVNFLCBTVUJMQU5HX0RFRkFVTFQKCklERF9TQVZFT1BUSU9OUyBESUFMT0cgRklYRUQgSU1QVVJFICA0MywgMzcsIDIyNiwgODIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIoizj2uDSYN2g1aDh4OTIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIoNYg2eDioFbg4CC8JFJkfAoJkMpOiIsLTEsMiw1LDE1NCwxMAogICAgQ09NQk9CT1ggICAgICAgIElEQ19TVFJFQU0sMiwxOCwxNTQsNjEsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAig0mDdoNWg4eDkygmTykuLi4iLElEQ19PUFRJT05TLDE3MCwxNyw1MCwxNAogICAgQVVUT0NIRUNLQk9YICAgICKDQ4OTg16BW4OKgVuDdSgmSSkiLElEQ19JTlRFUkxFQVZFLDMsNDIsODUsMTEsV1NfVEFCU1RPUAogICAgRURJVFRFWFQgICAgICAgIElEQ19JTlRFUkxFQVZFRVZFUlksOTEsNDEsMzIsMTIsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAig3SDjIFbg4AiLC0xLDEyOSw0MywzNiw5CiAgICBMVEVYVCAgICAgICAgICAgIoy7jd2CzIN0g0iBW4N9g2KDZzoiLC0xLDMsNTYsNzMsOQogICAgTFRFWFQgICAgICAgICAgICJUaGlzIHNwYWNlIGZvciByZW50IixJRENfRk9STUFUVEVYVCw3NSw1Niw5MCwyNgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNzAsNDIsNTAsMTQKICAgIFBVU0hCVVRUT04gICAgICAig0yDg4OTg1qDiyIsSURDQU5DRUwsMTcwLDYxLDUwLDE0CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19XQVZFU1RSRUFNRk9STUFUCSJXYXZlg3SDQINDg4s6ICVzIgogIElEU19XQVZFRklMRVRZUEUJIldhdmWDdINAg0ODiyIKICBJRFNfQUxMTVVMVElNRURJQQkikVOCxILMg32Di4Ngg4GDZoNCg0GDdINAg0ODiyIKICBJRFNfQUxMRklMRVMJCSKRU4LEgsyDdINAg0ODiyAoKi4qKUAqLioiCiAgSURTX1ZJREVPCQkig3KDZoNJIgogIElEU19BVURJTwkJIom5kLoiCiAgSURTX0FWSVNUUkVBTUZPUk1BVAkiJXMgJXMgIyVkIgogIElEU19BVklGSUxFVFlQRQkiV2luZSBBVkktZGVmYXVsdC1maWxlaGFuZGxlciIKICBJRFNfVU5DT01QUkVTU0VEICAgICAgIpaiiLOPayIKfQo=