LyoKICogVW5pbnN0YWxsZXIgKEVzcGVyYW50byBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDA2IEFudG9uaW8gQ29kYXp6aQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0VTUEVSQU5UTywgU1VCTEFOR19ORVVUUkFMCgpJRERfVU5JTlNUQUxMRVIgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAzMzAsIDE2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV2luZSBQcm9ncmFtYSBNYWxpbnN0YWxpbG8iCkZPTlQgMTAsICJNUyBTYW5zIFNlcmlmIgpCRUdJTgogICAgTFRFWFQgICAgICAgICAgICJFbGVrdHUgbGEgcHJvZ3JhbW9uIGtpb24gdmkgZGVzaXJhcyBmb3JpZ2k6IixJRENfUExFQVNFU0VMRUNULDEwLDEwLDI1MCwxNAogICAgRURJVFRFWFQgICAgICAgIElEQ19GSUxURVIsMTAsMjUsMjUwLDE0LEVTX0FVVE9IU0NST0xMCiAgICBMSVNUQk9YICAgICAgICAgSURDX0xJU1QsMTAsNDMsMjUwLDEwNixMQlNfTk9JTlRFR1JBTEhFSUdIVCB8IAogICAgICAgICAgICAgICAgICAgIExCU19FWFRFTkRFRFNFTCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiAgICBQVVNIQlVUVE9OICAgICAgIiZGb3JpZ2kiLElEQ19VTklOU1RBTEwsMjcwLDQ4LDUwLDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZQcmkuLiIsSURDX0FCT1VULDI3MCw2NSw1MCwxNAogICAgUFVTSEJVVFRPTiAgICAgICImRmVybXUiLElEQ19FWElULDI3MCw4MSw1MCwxNApFTkQKCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSB7CiAgICAgSURTX0FQUE5BTUUsICJXaW5lIFByb2dyYW1hIE1hbGluc3RhbGlsbyIKICAgICBJRFNfQUJPVVQsICJXaW5lIEFwcGxpY2F0aW9uIFVuaW5zdGFsbGVyIChDKSAyMDA1IGJ5IEFuZHJlYXMgTW9ociwgSGFubnUgVmFsdG9uZW4gYW5kIEpvbmF0aGFuIEVybnN0LiBFc3BlcmFudGEgdHJhZHVrbzogQW50b25pbyBDb2RhenppIgogICAgIElEU19BQk9VVFRJVExFLCAiUHJpIE1hbGluc3RhbGlsbyIKICAgICBJRFNfUkVHSVNUUllLRVlOT1RBVkFJTEFCTEUsICJSZWdpc3Ry/mxvc2lsbyBuZSBlc3RhcyBqZSBkaXNwb25vLiBOZW5pbyBlc3RhcyBmYXJlYmxhICEiCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIk1hbGluc3RhbGFkLWtvbWFuZG8gJyVzJyBtYWxzdWtjZXNpcywgZWJsZSDmYXIgbWFua2FzIHByb2dyYW1vLlxyXG7GdSB2aSB2b2xhcyBmb3JpZ2kgbGEgbWFsaW5zdGFsYWRhICdlbnRyeScgZGUgbGEgcmVnaXN0cm8gPyIKfQo=