LyoKICogQ29weXJpZ2h0IDIwMDIgTWljaGFlbCBH/G5uZXdpZwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0dFUk1BTiwgU1VCTEFOR19HRVJNQU4KCklERF9TQVZFT1BUSU9OUyBESUFMT0cgRklYRUQgSU1QVVJFICA0MywgMzcsIDE5NiwgODIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIktvbXByaW1pZXJ1bmdzb3B0aW9uZW4iCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiJlfkaGxlbiBTaWUgZGllIEVpbmdhbmdzZGF0ZW4gYXVzOiIsLTEsMiw1LDExNCwxMAogICAgQ09NQk9CT1ggICAgICAgIElEQ19TVFJFQU0sMiwxOCwxMzQsNjEsQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCAKICAgICAgICAgICAgICAgICAgICBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZPcHRpb25lbi4uLiIsSURDX09QVElPTlMsMTQ1LDE3LDQ1LDE0CiAgICBBVVRPQ0hFQ0tCT1ggICAgIiZJbnRlcmxlYXZlIGFsbGUiLElEQ19JTlRFUkxFQVZFLDMsNDIsNjAsMTEsV1NfVEFCU1RPUAogICAgRURJVFRFWFQgICAgICAgIElEQ19JTlRFUkxFQVZFRVZFUlksNjYsNDEsMzIsMTIsRVNfQVVUT0hTQ1JPTEwKICAgIExURVhUICAgICAgICAgICAiRWluemVsYmlsZGVyIiwtMSwxMDQsNDMsMzYsOQogICAgTFRFWFQgICAgICAgICAgICJBa3VlbGxlcyBGb3JtYXQ6IiwtMSwzLDU2LDUzLDkKICAgIExURVhUICAgICAgICAgICAiVGhpcyBzcGFjZSBmb3IgcmVudCIsSURDX0ZPUk1BVFRFWFQsNTUsNTYsOTAsMjYKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQ1LDQyLDQ1LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFiYnJlY2hlbiIsSURDQU5DRUwsMTQ1LDYxLDQ1LDE0CkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogIElEU19XQVZFU1RSRUFNRk9STUFUCSJXYXZlZm9ybTogJXMiCiAgSURTX1dBVkVGSUxFVFlQRQkiV2F2ZWZvcm0iCiAgSURTX0FMTE1VTFRJTUVESUEJIkFsbGUgTXVsdGltZWRpYS1EYXRlaWVuIgogIElEU19BTExGSUxFUwkJIkFsbGUgRGF0ZWllbiAoKi4qKUAqLioiCiAgSURTX1ZJREVPCQkiVmlkZW8iCiAgSURTX0FVRElPCQkiQXVkaW8iCiAgSURTX0FWSVNUUkVBTUZPUk1BVAkiJXMgJXMgIyVkIgogIElEU19BVklGSUxFVFlQRQkiV2luZSBBVkktU3RhbmRhcmQtRGF0ZWliZWhhbmRsdW5nc3JvdXRpbmUiCiAgSURTX1VOQ09NUFJFU1NFRCAgICAgICJVbmtvbXByaW1pZXJ0Igp9Cg==