LyoKICogVW5pbnN0YWxsZXIgKEdlcm1hbiBSZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAyMDA1IEhlbm5pbmcgR2VyaGFyZHQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfTkVVVFJBTAoKSUREX1VOSU5TVEFMTEVSIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAzMzAsIDE2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiV2luZSBBbndlbmR1bmdzZW50ZmVybmVyIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgICAgICBMVEVYVCAgICAgICAgICAgIkJpdHRlIHfkaGxlbiBTaWUgZGllIEFud2VuZHVuZyBhdXMsIGRpZSBTaWUgZW50ZmVybmVuIG32Y2h0ZW46IixJRENfUExFQVNFU0VMRUNULDEwLDEwLDI1MCwxNAogICAgICAgIEVESVRURVhUICAgICAgICBJRENfRklMVEVSLDEwLDI1LDI1MCwxNCxFU19BVVRPSFNDUk9MTAogICAgICAgIExJU1RCT1ggICAgICAgICBJRENfTElTVCwxMCw0MywyNTAsMTA2LExCU19OT0lOVEVHUkFMSEVJR0hUIHwKICAgICAgICAgICAgICAgICAgICAgICAgTEJTX0VYVEVOREVEU0VMIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKICAgICAgICBQVVNIQlVUVE9OICAgICAgIiZFbnRmZXJuZW4iLElEQ19VTklOU1RBTEwsMjcwLDQ4LDUwLDE0CiAgICAgICAgUFVTSEJVVFRPTiAgICAgICLcJmJlciIsSURDX0FCT1VULDI3MCw2NSw1MCwxNAogICAgICAgIFBVU0hCVVRUT04gICAgICAiRSZuZGUiLElEQ19FWElULDI3MCw4MSw1MCwxNApFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIHsKICAgICBJRFNfQVBQTkFNRSwgIldpbmUgQW53ZW5kdW5nc2VudGZlcm5lciIKICAgICBJRFNfQUJPVVQsICJXaW5lIEFud2VuZHVuZ3NlbnRmZXJuZXIgKEMpIDIwMDUgZHVyY2ggQW5kcmVhcyBNb2hyLCBIYW5udSBWYWx0b25lbiB1bmQgSm9uYXRoYW4gRXJuc3QuIgogICAgIElEU19BQk9VVFRJVExFLCAi3GJlciBkZW4gQW53ZW5kdW5nc2VudGZlcm5lciIKICAgICBJRFNfUkVHSVNUUllLRVlOT1RBVkFJTEFCTEUsICJEZXIgUmVnaXN0cnktU2NobPxzc2VsIGb8ciB6dSBlbnRmZXJuZW5kZSBBbndlbmR1bmcoZW4pIGlzdCAobm9jaCkgbmljaHQgdmVyZvxnYmFyLCBlcyBrYW5uIG5pY2h0cyBnZW1hY2h0IHdlcmRlbi4iCiAgICAgSURTX1VOSU5TVEFMTEZBSUxFRCwgIkRpZSBBdXNm/GhydW5nIGRlcyBFbnRmZXJudW5nc2JlZmVobHMgJyVzJyBpc3QgZmVobGdlc2NobGFnZW4sIHdhaHJzY2hlaW5saWNoIGR1cmNoIGVpbmUgZmVobGVuZGUsIGF1c2b8aHJiYXJlIERhdGVpLlxyXG5N9mNodGVuIFNpZSwgZGFzcyBkZXIgQW53ZW5kdW5nc2VpbnRyYWcgYXVzIGRlciBSZWdpc3RyeSBlbnRmZXJudCB3aXJkID8iCn0K