LyoKICogIE5vdGVwYWQgKE5vcndlZ2lhbiBCb2tt5WwgcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDUgQWxleGFuZGVyIE4uIFP4cm5lcyA8YWxleEB0aGVoYW5kb2ZhZ29ueS5jb20+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfTk9SV0VHSUFOLCBTVUJMQU5HX05PUldFR0lBTl9CT0tNQUwKCk1BSU5fTUVOVSBNRU5VCnsKIFBPUFVQICImRmlsIiB7CiAgTUVOVUlURU0gIiZOeSAuIC4gLlx0Q3RybCtOIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJsVwbmVcdEN0cmwrTyIsICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImTGFncmVcdEN0cmwrUyIsICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJMYWdyJmUgc29tIC4gLiAuIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJlNrcml2IHV0XHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJTaWRlb3Bwc2UmdHQgLiAuIC4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJTayZyaXZlcm9wcHNldHQgLiAuIC4iLCBDTURfUFJJTlRFUl9TRVRVUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQXZzbHV0dCIsICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICJSJmVkaWdlciIgewogIE1FTlVJVEVNICImQW5ncmVcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJLbGlwcCB1JnRcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29waWVyXHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJkxpbSBpbm5cdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICImU2xldHRcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNZXJrICZhbHRcdEN0cmwrQSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIiZUaWQvRGF0b1x0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIlRla3N0YnJ5dGluJmciLCAgQ01EX1dSQVAKICBNRU5VSVRFTSAiU2tyJmlmdCAuIC4gLiIsICAgICAgICAgIENNRF9GT05UCiB9ClBPUFVQICImU/hrIiB7CiAgTUVOVUlURU0gIiZT+GtcdEN0cmwrRiIsICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICImU/hrIGV0dGVyIG5lc3QmZVx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImSGplbHAiIHsKICBNRU5VSVRFTSAiJklubmhvbGQiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZT+GsgLiAuIC4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZIamVscCBvbSBoamVscCIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIkluZiZvcm1hc2pvbiAuIC4gLiIgewogICBNRU5VSVRFTSAiJkxpc2VucyIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIkkmTkdFTiBHQVJBTlRJIiwgICAgIENNRF9OT19XQVJSQU5UWQogICBNRU5VSVRFTSAiJk9tIFdpbmUiLCAgICAgIENNRF9BQk9VVF9XSU5FCiAgfQogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlNpZGVvcHBzZXR0Igp7CkxURVhUICAgICImVG9wcHRla3N0OiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCdW5udGVrc3Q6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzLCAgICAgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJnOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJlZlbnN0cmU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZUb3BwOiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJI+HkmcmU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCdW5uOiIsICAgICAgMHgxNEUsMTAwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsKi8gMHgxNTAsICAgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkF2YnJ5dCIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhqZWxwIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlNpZGUgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgICAiMjBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgICAgICAgICAiMjVtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1bW0iICAgICAvKiBGSVhNRSAqLwoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGlzYmxva2siClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRUlMIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURWQVJTRUwiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hc2pvbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoVXRlbiBuYXZuKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBbGxlIGZpbGVyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIlRla3N0ZmlsZXIgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnIGVyIGZvciBzdG9yIGZvciBOb3Rpc2Jsb2trLlxuIFwKQnJ1ayBlbiBhbm5lbiByZWRpZ2VyZXIuIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHUgc2tyZXYgaWtrZSBpbm4gbm9lIHRla3N0LiBcClxuU2tyaXYgbm9lIG9nIHBy+HYgaWdqZW4uIgpTVFJJTkdfRE9FU05PVEVYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJ2Zpbm5lcyBpa2tlLlxuXG4gXApPcHByZXR0ZSBlbiBueSBmaWw/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJyBlciBlbmRyZXQuXG5cbiBcCkxhZ3JlIGVuZHJpbmdlbmU/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGJsZSBpa2tlIGZ1bm5ldC4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiSWtrZSBub2sgbWlubmUgZm9yIOUgZnVsbGb4cmUgXApvcGVyYXNqb25lbi4gXG5MdWtrIGV0IGVsbGVyIGZsZXJlIHByb2dyYW1tZXIgZm9yIOUgZnJpZ2r4cmUgXG5tZXIgXAptaW5uZS4iCgp9Cg==