LyoKICogTm90ZXBhZCAoU2xvdmVuaWFuIHJlc291cmNlcykKICoKICogQ29weXJpZ2h0IDIwMDItMjAwMyBSb2sgTWFuZGVsamMgPHJvay5tYW5kZWxqY0BnaW1iLm9yZz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19TTE9WRU5JQU4sIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEYXRvdGVrYSIgewogIE1FTlVJVEVNICImTm92YVx0Q3RybCtOIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiJk9kcHJpIC4uLlx0Q3RybCtPIiwgICAgICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJlNocmFuaVx0Q3RybCtTIiwgICAgICAgICAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiU2hyYW5pICZrb3QgLi4uIiwgICAgICAgQ01EX1NBVkVfQVMKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiTmEmdGlzbmkgLi4uXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICJQJnJpcHJhdmEgc3RyYW5pIC4uLiIsICAgIENNRF9QQUdFX1NFVFVQCiAgTUVOVUlURU0gIiZUaXNrYWxuaWsgLi4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiSXomaG9kIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIiZVcmVqYW5qZSIgewogIE1FTlVJVEVNICImUmF6dmVsamF2aVx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJenJlnmlcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICImS29waXJhalx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIiZQcmlsZXBpXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiSXpicmkmmmlcdERlbCIsICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJJemJlcmkgJnZzZSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIshhcy8mRGF0dW1cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJQciZlbG9tIHZyc3RpY2UiLCAgQ01EX1dSQVAKIH0KUE9QVVAgIiZJc2thbmplIiB7CiAgTUVOVUlURU0gIiZOYWpkaSAuLi4iLCAgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJOYSZkYWxqdWogaXNrYW5qZVx0RjMiLCAgQ01EX1NFQVJDSF9ORVhUCiB9ClBPUFVQICImUG9tb+giIHsKICBNRU5VSVRFTSAiJlRlbWUgcG9tb+hpIiwgICAgICAgICBDTURfSEVMUF9DT05URU5UUwogIE1FTlVJVEVNICImTmFqZGkgLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImTyBwb21v6GkiLCAgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICJJbmYmb3JtYWNpamUiIHsKICAgTUVOVUlURU0gIiZMaWNlbuhuYSBwb2dvZGJhIC4uLiIsICAgICAgICAgQ01EX0xJQ0VOU0UKICAgTUVOVUlURU0gIiZCUkVaIEdBUkFOQ0lKRSAuLi4iLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImTyBXaW5lIC4uLiIsICAgICAgQ01EX0FCT1VUX1dJTkUKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVAgRElBTE9HIDAsIDAsIDIyNSwgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQ0FQVElPTiAiUGFnZSBTZXR1cCIKewpMVEVYVCAgICAiJkdsYXZhOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZOb2dhOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICJSb2JvdmkiLCAgICAgIDB4MTQ0LCAgICAgMTAsIDQzLDE2MCwgNDUKTFRFWFQgICAgIiZMZXZvOiIsICAgICAgICAweDE0NSwgICAyMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwqLyAgIDB4MTQ3LCAgICAgICA1MCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRGVzbm86IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZaZ29yYWo6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZTcG9kYWo6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIlYgcmVkdSIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIlByZWtsaehpIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImUG9tb+giLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiU3RyYW4gJnMiICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCZWxlnm5pY2EiClNUUklOR19FUlJPUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOQVBBS0EiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPUE9aT1JJTE8iClNUUklOR19JTkZPLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hY2lqYSIKClNUUklOR19VTlRJVExFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOZWltZW5vdmFuYSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWc2UgZGF0b3Rla2UgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAgICAgICAgICAiRGF0b3Rla2UgeiBiZXNlZGlsb20gKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRvdGVrYSAnJXMnIGplIHByZXZlbGlrYSB6YSBCZWxlnm5pY28uXG4gXApVcG9yYWJpdGUgZHJ1ZyB1cmVqZXZhbG5pay4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOaXN0ZSB2bmVzbGkgYmVzZWRpbGEuIFwKXG5WbmVzaXRlIGJlc2VkaWxvIGluIHBvc2t1c2l0ZSB6bm92YS4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYXRvdGVrYSAnJXMnIG5lIG9ic3RhamEuXG5cbiBcCkFsaSCeZWxpdGUgdXN0dmFyaXRpIG5vdm8gZGF0b3Rla28/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVnNlYmluYSBkYXRvdGVrZSAnJXMnamUgYmlsYSBzcHJlbWVuamVuYS5cblxuIFwKQWxpIJ5lbGl0ZSBzaHJhbml0aSBzcHJlbWVtYmU/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOaSBtb2dv6GUgbmFqdGkgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiTmEgdm9sam8gbmkgZG92b2xqIHBvbW5pbG5pa2EsIGRhIGJpIGJpbG8gbW9nb+hlIGRva29u6GF0aSB0byBcCm9wZXJhY2lqby4gXG7IZSBnYSCeZWxpdGUgc3Byb3N0aXRpLCBrb27oYWp0ZSBlbmVnYSBhbGkgdmXoIHByb2dyYW1vdiBpbiBwb3NrdXNpdGUgem5vdmEuICIKCn0K