LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBGaW5uaXNoIGxhbmd1YWdlIGJ5IEp1c3NpIFRpcmtrb25lbiA8anRAbW9kZWVtaS5jcy50dXQuZmk+CiAqIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJlRpZWRvc3RvIiB7CiAgTUVOVUlURU0gIiZBdmFhLi4uIiwgTU5JRF9GSUxFX09QRU4KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlR1bG9zdGEiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJktpcmpvaXR0aW1lbiBhc2V0dWtzZXQuLi4iLCBNTklEX0ZJTEVfU0VUVVAKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZMb3BldGEiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZNdW9ra2FhIiB7CiAgIE1FTlVJVEVNICImS29waW9pLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImSHVvbWF1dHVzLi4uIiwgTU5JRF9FRElUX0FOTk9UQVRFCiB9CiBQT1BVUCAiJktpcmphbm1lcmtraSIgewogICBNRU5VSVRFTSAiJkFzZXRhLi4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIiZPaGplIiB7CiAgIE1FTlVJVEVNICImT2hqZWVuIGvkeXR09iIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIiZBaW5hIHDk5GxsaW1t5GlzZW7kIiwgTU5JRF9IRUxQX0hFTFBUT1AKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICJUJmlldG9qYS4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiJlRpZXRvamEgV0lORXN05CIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX0ZJTk5JU0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIldJTkUgT2hqZSIKU1RJRF9XSEVSUk9SLCAJCSJWSVJIRSIKU1RJRF9XQVJOSU5HLCAgCQkiVkFST0lUVVMiClNUSURfSU5GTywgIAkJIlRpZXRvamEiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIkVpIGvkeXRldHTkdmlzc+QiClNUSURfSExQRklMRV9FUlJPUl9zLCAJIlZpcmhlIGx1ZXR0YWVzc2Egb2hqZXRpZWRvc3RvYSBgJXMnIgpTVElEX0NPTlRFTlRTLCAJCSImU2lz5GxseXMiClNUSURfU0VBUkNILCAJCSImRXRzaSIKU1RJRF9CQUNLLCAJCSImVGFrYWlzaW4iClNUSURfSElTVE9SWSwgCQkiJkx1ZXR1dCIKU1RJRF9UT1BJQ1MsCQkiVCZvcGljcyIKU1RJRF9BTExfRklMRVMsIAkiS2Fpa2tpIHRpZWRvc3RvdCAoKi4qKSIKU1RJRF9IRUxQX0ZJTEVTX0hMUCwgCSJPaGpldGllZG9zdG90ICgqLmhscCkiClNUSURfRklMRV9OT1RfRk9VTkRfcwkiQ2Fubm90IGZpbmQgJyVzJy4gRG8geW91IHdhbnQgdG8gZmluZCB0aGlzIGZpbGUgeW91cnNlbGY/Igp9Cg==