LyoKICogQ29weXJpZ2h0IDIwMDYgQW5kcmFzIEtvdmFjcwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUCgpJRERfU0FWRU9QVElPTlMgRElBTE9HIEZJWEVEIElNUFVSRSAgNDMsIDM3LCAxOTYsIDgyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJU9m32cu106XNpIGJl4Wxs7XThc29rIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIiZW4Wxhc3N1b24gZm9seWFtb3Q6IiwtMSwyLDUsMTE0LDEwCiAgICBDT01CT0JPWCAgICAgICAgSURDX1NUUkVBTSwyLDE4LDEzNCw2MSxDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IAogICAgICAgICAgICAgICAgICAgIFdTX1RBQlNUT1AKICAgIFBVU0hCVVRUT04gICAgICAiJk9wY2nzay4uLiIsSURDX09QVElPTlMsMTQ1LDE3LDQ1LDE0CiAgICBBVVRPQ0hFQ0tCT1ggICAgIiZCZelrZWwgbWluZGVuIixJRENfSU5URVJMRUFWRSwzLDQyLDYwLDExLFdTX1RBQlNUT1AKICAgIEVESVRURVhUICAgICAgICBJRENfSU5URVJMRUFWRUVWRVJZLDY2LDQxLDMyLDEyLEVTX0FVVE9IU0NST0xMCiAgICBMVEVYVCAgICAgICAgICAgImvpcGtvY2vhdCIsLTEsMTA0LDQzLDM2LDkKICAgIExURVhUICAgICAgICAgICAiSmVsZW5sZWdpIGZvcm3hdHVtOiIsLTEsMyw1Niw1Myw5CiAgICBMVEVYVCAgICAgICAgICAgIkV6IGhlbHkga/ZsY3P2bnrpc3JlIixJRENfRk9STUFUVEVYVCw1NSw1Niw5MCwyNgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDUsNDIsNDUsMTQKICAgIFBVU0hCVVRUT04gICAgICAiTelnc2UiLElEQ0FOQ0VMLDE0NSw2MSw0NSwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICBJRFNfV0FWRVNUUkVBTUZPUk1BVAkiSHVsbOFtZm9ybWE6ICVzIgogIElEU19XQVZFRklMRVRZUEUJIkh1bGzhbWZvcm1hIgogIElEU19BTExNVUxUSU1FRElBCSJNaW5kZW4gbXVsdGlt6WRpYSBm4WpsIgogIElEU19BTExGSUxFUwkJIk1pbmRlbiBm4WpsICgqLiopQCouKiIKICBJRFNfVklERU8JCSJ2aWRlbyIKICBJRFNfQVVESU8JCSJoYW5nIgogIElEU19BVklTVFJFQU1GT1JNQVQJIiVzICVzICMlZCIKICBJRFNfQVZJRklMRVRZUEUJIldpbmUgQVZJLWFsYXDpcnRlbG1lemV0dC1m4Wpsa2V6ZWz1IgogIElEU19VTkNPTVBSRVNTRUQgICAgICAidPZt9nLtdGV0bGVuIgp9Cg==