LyoKICogIE5vdGVwYWQgKFNwYW5pc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDE5OTcsOTggTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoPgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgogKiAgUHJvb2ZyZWFkIDE5OTkgYnkgSm9zZSBNYXJjb3MgTG9wZXogPGpvc2UubG9wZXpAdXBjbmV0LnVwYy5lcz4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKiAgQ29weXJpZ2h0IDIwMDMsMjAwNCBKb3PpIE1hbnVlbCBGZXJyZXIgT3J0aXoKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TUEFOSVNILCBTVUJMQU5HX05FVVRSQUwKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImQXJjaGl2byIgewogIE1FTlVJVEVNICImTnVldm9cdEN0cmwrTiIsICAgICAgICAgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJkFicmlyLi4uXHRDdHJsK08iLCAgICAgICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJkd1YXJkYXJcdEN0cmwrUyIsICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiR3VhcmRhciAmY29tby4uLiIsICAgICAgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkltcHJpbWlyLi4uXHRDdHJsK1AiLCAgICAgICAgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiQ29uZmlndXJhciAmcOFnaW5hLi4uIiwgICAgICAgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiQ29uZmlndXJhY2nzbiAmaW1wcmVzb3JhLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNhbGlyIiwgICAgICAgICAgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZFZGl0YXIiIHsKICBNRU5VSVRFTSAiJkRlc2hhY2VyXHRDdHJsK1oiLCAgICAgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkNvciZ0YXJcdEN0cmwrWCIsICAgICAgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZDb3BpYXJcdEN0cmwrQyIsICAgICAgICAgICBDTURfQ09QWQogIE1FTlVJVEVNICImUGVnYXJcdEN0cmwrViIsICAgICAgICAgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZCb3JyYXJcdERlbCIsICAgICAgICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlNlbGVjY2lvbmFyIHQmb2RvXHRDdHJsK0EiLCBDTURfU0VMRUNUX0FMTAogIE1FTlVJVEVNICImSG9yYSB5IGZlY2hhXHRGNSIsICAgICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWp1c3RlIGRlIGztbmVhIiwgICAgICAgICAgQ01EX1dSQVAKICBNRU5VSVRFTSAiVGlwbyBkZSAmbGV0cmEuLi4iLCAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImQnVzY2FyIiB7CiAgTUVOVUlURU0gIiZCdXNjYXIuLi5cdEN0cmwrRiIsICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiQnVzY2FyICZzaWd1aWVudGVcdEYzIiwgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICJBJnl1ZGEiIHsKICBNRU5VSVRFTSAizSZuZGljZSIsICAgICAgICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAiJkJ1c2Nhci4uLiIsICAgICAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIkEmeXVkYSBzb2JyZSBsYSBheXVkYSIsIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFib3V0IE5vdGVwYWQiLCBDTURfSEVMUF9BQk9VVF9OT1RFUEFECiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiQWp1c3RlIGRlIHDhZ2luYSIKewpMVEVYVCAgICAiJkNhYmVjZXJhOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImUGllOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJk3hcmdlbmVzIChtbSk6IiwgIDB4MTQ0LCAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImSXpxdWllcmRhOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJBJnJyaWJhOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX1RPUFZBTFVFLCAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEZXJlY2hhOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiQWJhJmpvOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCBJRENfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIkFjZXB0YXIiLCAgICAgIElET0ssICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiQ2FuY2VsYXIiLCAgICAgSURDQU5DRUwsICAgICAgICAgICAgICAgMTgwLCAyMSwgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIiZBeXVkYSIsICAgICAgIElESEVMUCwgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKU1RSSU5HX1BBR0VTRVRVUF9IRUFERVJWQUxVRSwgICAiJmYiClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlDhZ2luYSAmcCIKClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgIkJsb2MgZGUgbm90YXMiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgIkVSUk9SIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICJBRFZFUlRFTkNJQSIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAiSW5mb3JtYWNp824iCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICIoc2luIHTtdHVsbykiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICJUb2RvcyBsb3MgYXJjaGl2b3MgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgIkRvY3VtZW50b3MgZGUgdGV4dG8gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgIkVsIGFyY2hpdm8gJyVzJyBlcyBkZW1hc2lhZG8gZ3JhbmRlIHBhcmEgZWwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jIGRlIG5vdGFzLlxuIFVzZSBvdHJvIGVkaXRvci4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgIk5vIGVzY3JpYmnzIG5hZGEuXG5Qb3IgZmF2b3IgZXNjcmliYSBhbGdvIGUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnTpbnRlbG8gZGUgbnVldm8iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgIkVsIGFyY2hpdm8gJyVzJ1xubm8gZXhpc3RlXG5cbiC/RGVzZWEgY3JlYXIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1biBudWV2byBhcmNoaXZvPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAiRWwgdGV4dG8gZW4gZWwgYXJjaGl2byAnJXMnIGhhIGNhbWJpYWRvXG5cbiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIL9EZXNlYSBndWFyZGFyIGxvcyBjYW1iaW9zPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAiTm8gc2UgZW5jb250cvMgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgIk5vIGhheSBzdWZpY2llbnRlIG1lbW9yaWEgcGFyYSB0ZXJtaW5hciBlc3RhIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEuXG5DaWVycmUgdW5hIG8gbeFzIGFwbGljYWNpb25lcyBwYXJhIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVtZW50YXIgbGEgY2FudGlkYWRcbmRlIG1lbW9yaWEgbGlicmUuIgoKfQo=