LyoKICogIE5vdGVwYWQgKERhbmlzaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5OCBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZGaWxlciIgewogIE1FTlVJVEVNICImTnlcdEN0cmwrTiIsICAgICAgICAgICAgQ01EX05FVwogIE1FTlVJVEVNICLFJmJuLi4uXHRDdHJsK08iLCAgICAgICBDTURfT1BFTgogIE1FTlVJVEVNICImR2VtXHRDdHJsK1MiLCAgICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiR2VtIHNvJm0uLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNICImVWRza3Jpdi4uLlx0Q3RybCtQIiwgICAgICAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNpZGUmb3Bz5nRuaW5nLi4uIiwgQ01EX1BBR0VfU0VUVVAKICBNRU5VSVRFTSAiJkluZHN0aWwgcHJpbnRlci4uLiIsICAgICAgIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBZnNsdXQiLCAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZSZWRpZ2VyIiB7CiAgTUVOVUlURU0gIiZGb3J0cnlkXHRDdHJsK1oiLCAgQ01EX1VORE8KICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJktsaXBcdEN0cmwrWCIsICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIksmb3BpZXJcdEN0cmwrQyIsICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiU+Z0ICZpbmRcdEN0cmwrViIsICBDTURfUEFTVEUKICBNRU5VSVRFTSAiJlNsZXRcdERlbCIsICAgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk1hcmtlciAmYWx0IiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAiJkRhdG8vdGlkXHRGNSIsICAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIkF1dG9tYXRpc2sgJmxpbmplc2tpZnQiLCAgICBDTURfV1JBUAogfQpQT1BVUCAiJlP4ZyIgewogIE1FTlVJVEVNICImU/hnLi4uIiwgICAgICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJkZpbmQgbuZzdGVcdEYzIiwgICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZIauZscCIgewogIE1FTlVJVEVNICImSW5kaG9sZCIsICAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZT+GcgZWZ0ZXIgaGrmbHAgb20uLi4iLCAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkJydWcgYWYgSGrmbHAiLCAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgUE9QVVAgIiZPbSBOb3Rlc2Jsb2siIHsKICAgTUVOVUlURU0gIiZMaWNlbnMuLi4iLCAgICAgICAgICBDTURfTElDRU5TRQogICBNRU5VSVRFTSAiJkluZ2VuIEdhcmVudGkuLi4iLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImT20gV0lORS4uLiIsICAgICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiU2lkZW9wc+Z0bmluZyIKewpMVEVYVCAgICAiJlNpZGVob3ZlZDoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJTaWRlJmZvZDoiLCAgMHgxNDIsICAgMTAsIDI0LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMsICAgICAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiTWFyZ2VuZXI6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImVmVuc3RyZToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlRvcDoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1RPUFZBTFVFLCovICAgIDB4MTRBLCAgICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkj4anJlOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCovICAweDE0RCwgICAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQnVuZDoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0JPVFRPTVZBTFVFLCovIDB4MTUwLCAgICAxMzAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKREVGUFVTSEJVVFRPTiAiT0siLCAgICAgICAgIElET0ssICAgICAgICAgICAgICAgICAgIDE4MCwgIDMsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICJBbm51bGxlciIsICAgICBJRENBTkNFTCwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkhq5mxwIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsICAgIlBhZ2UgJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb3Rlc2Jsb2siClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGRUpMIgpTVFJJTkdfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQURWQVJTRUwiClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGlvbiIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoaWtrZS1uYXZuZ2l2ZXQpIgoKU1RSSU5HX0FMTF9GSUxFUywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbGUgZmlsZXIgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiVGVrc3QgZmlsZXIgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnIGVyIGZvciBzdG9yIHRpbCBOb3Rlc2Jsb2suIFwKXG5CcnVnIGVuIGFuZGVuIGVkaXRvciB0aWwgYXQgcmVkaWdlcmUgZmlsZW4uIgpTVFJJTkdfTk9URVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHUgaGFyIGlra2Ugc2tyZXZldCBub2dldCB0ZWtzdC4gXApcblNrcml2IG5vZ2V0IHRla3N0LCBvZyBwcvh2IHPlIGlnZW4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlbiAnJXMnXG5maW5kZXMgaWtrZVxuXG4gXArYbnNrZXIgZHUgYXQgb3ByZXR0ZSBlbiBueSBmaWwgPyIKU1RSSU5HX05PVFNBVkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcydcbmVyIGJsZXZldCDmbmRyZXRcblxuIFwKVmlsIGR1IGdlbW1lIOZuZHJpbmdlcm5lID8iClNUUklOR19OT1RGT1VORCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkthbiBpa2tlIGZpbmRlICclcycuIgpTVFJJTkdfT1VUX09GX01FTU9SWSwgICAgICAgICAgICAgICAgICAgIkRlciBlciBpa2tlIG5vayBodWtvbW1lbHNlIHRpbCBhdCB1ZGb4cmUgXApkZW5uZSBvcGVyYXRpb24uIFxuQWZzbHV0IGV0IGVsbGVyIGZsZXJlIGFrdGl2ZSBwcm9ncmFtbWVyIGZvciBhdCBmcmln+HJlIFwKaHVrb21tZWxzZSwgb2cgcHL4diBpZ2VuLiIKCn0K