LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDA0IEhlbm5pbmcgR2VyaGFyZHQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19HRVJNQU4sIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZHcm/fZSBTeW1ib2xlIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImS2xlaW5lIFN5bWJvbGUiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCglNRU5VSVRFTSAiJkxpc3RlIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJTUVOVUlURU0gIiZEZXRhaWxzIiwJCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCkVORAoKLyoKIHNoZWxsdmlldyBiYWNrZ3JvdW5kIG1lbnUKKi8KTUVOVV8wMDIgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAiIgoJQkVHSU4KCSAgUE9QVVAgIiZBbnNpY2h0IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICImR3Jv32UgU3ltYm9sZSIsCUZDSURNX1NIVklFV19CSUdJQ09OCgkgICAgTUVOVUlURU0gIiZLbGVpbmUgU3ltYm9sZSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJkxpc3RlIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImRGV0YWlscyIsCUZDSURNX1NIVklFV19SRVBPUlRWSUVXCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIlN5bWJvbGUgYW5vcmRuZW4iCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIk5hY2ggJk5hbWUiLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIk5hY2ggJlR5cCIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiTmFjaCAmR3L232UiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJOYWNoICZEYXR1bSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJkF1dG9tYXRpc2NoIGFub3JkbmVuIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiTGluZSB1cCBJY29ucyIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQWt0dWFsaXNpZXJlbiIsCQlGQ0lETV9TSFZJRVdfUkVGUkVTSAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVpbmb8Z2VuIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkVpbmb8Z2VuIGFscyBWZXJ3ZWlzIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOZXUiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIk5ldWVzIFZlciZ6ZWljaG5pcyIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAiTmV1ZXIgVmVyJndlaXMiLAlGQ0lETV9TSFZJRVdfTkVXTElOSwoJICAgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImRWlnZW5zY2hhZnRlbiIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnJrdW5kZW4iLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIibWZmZuZW4iLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImQXVzc2NobmVpZGVuIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZLb3BpZXJlbiIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkVyc3RlbGxlIFZlciZ3ZWlzIiwJRkNJRE1fU0hWSUVXX0NSRUFURUxJTksKCSAgTUVOVUlURU0gIiZM9nNjaGVuIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZVbWJlbmVubmVuIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImRWlnZW5zY2hhZnRlbiIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJOYWNoIFZlcnplaWNobmlzIGR1cmNoc3VjaGVuIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBYmJyZWNoZW4iLCAyLCAxMzQsIDE3NiwgNTAsIDEyLCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKIExURVhUICIiLCBJRERfVElUTEUsIDQsIDQsIDE4MCwgMTIKIExURVhUICIiLCBJRERfU1RBVFVTLCA0LCAyNSwgMTgwLCAxMgogQ09OVFJPTCAiIiwgSUREX1RSRUVWSUVXLCAiU3lzVHJlZVZpZXczMiIsCiAJVFZTX0hBU0JVVFRPTlMgfCBUVlNfSEFTTElORVMgfCBUVlNfTElORVNBVFJPT1QgfAoJV1NfQk9SREVSIHwgV1NfVEFCU1RPUCwKCTQsIDQwLCAxODAsIDEyMAp9CgpTSEVMTF9BQk9VVF9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAyMTAsIDE1MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19WSVNJQkxFIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiSW5mb3JtYXRpb25lbiD8YmVyICVzIgpGT05UIDEwLCAiTVMgU2hlbGwgRGxnIgp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMwLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTg5LCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCA4LCAxMCwgMTM3LCAzMwogTFRFWFQgIldJTkUgd3VyZGUgZvxyIFNpZSBnZWtlbHRlcnQgdm9uOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkRlbiBOYW1lbiBlaW5lcyBQcm9ncmFtbWVzLCBlaW5lcyBPcmRuZXJzLCBlaW5lcyBEb2t1bWVudGVzIG9kZXIgZWluZXIgSW50ZXJuZXQgUmVzc291cmNlIGVpbmdlYmVuLCB1bmQgV2luZSB3aXJkIGVzIGb8ciBTaWUg9mZmbmVuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIibWZmZuZW46IiwgMTIzMDUsIDcsIDM5LCAyNCwgMTAKIENPTlRST0wgIiIsIDEyMjk4LCAiQ09NQk9CT1giLCBXU19UQUJTVE9QIHwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFiYnJlY2hlbiIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZEdXJjaHN1Y2hlbi4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIkRlc2t0b3AiCglJRFNfTVlDT01QVVRFUgkJIkFyYmVpdHNwbGF0eiIKfQoKLyoKCWNvbnRleHQgbWVudXMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1ZJRVdfTEFSR0UJCSImR3Jv32UgU3ltYm9sZSIKCUlEU19WSUVXX1NNQUxMCQkiJktsZWluZSBTeW1ib2xlIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0ZSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXRhaWxzIgoJSURTX1NFTEVDVAkJIkF1c3fkaGxlbiIKCUlEU19PUEVOCQki1mZmbmVuIgp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfQ1JFQVRFRk9MREVSX0RFTklFRCAiRXMga29ubnRlIGtlaW4gbmV1ZXMgVmVyemVpY2huaXMgZXJzdGVsbHQgd2VyZGVuOiBadWdyaWZmIHZlcndlaWdlcnQuIgoJSURTX0NSRUFURUZPTERFUl9DQVBUSU9OICJFcyB0cmF0IGVpbiBGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZWluZXMgbmV1ZW4gVmVyemVpY2huaXNzZXMgYXVmIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiQmVzdOR0aWd1bmc6IERhdGVpIGz2c2NoZW4iCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIkJlc3TkdGlndW5nOiBWZXJ6ZWljaG5pcyBs9nNjaGVuIgoJSURTX0RFTEVURUlURU1fVEVYVCAiU2luZCBTaWUgc2ljaCBzaWNoZXIsIGRhc3MgU2llIGRpZSBEYXRlaSAnJTEnIGz2c2NoZW4gbfZjaHRlbiA/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIlNpbmQgU2llIHNpY2ggc2ljaGVyLCBkYXNzIFNpZSBkaWVzZSAlMSBEYXRlaWVuIGz2c2NoZW4gbfZjaHRlbiA/IgoJSURTX09WRVJXUklURUZJTEVfVEVYVCAiTfZjaHRlbiBTaWUsIGRhc3MgZGllIERhdGVpICclMScg/GJlcnNjaHJpZWJlbiB3aXJkID8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJCZXN05HRpZ3VuZzogRGF0ZWkg/GJlcnNjaHJlaWJlbiIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSJEYXRlaSIKCUlEU19TSFZfQ09MVU1OMgkJIkdy9t9lIgoJSURTX1NIVl9DT0xVTU4zCQkiVHlwIgoJSURTX1NIVl9DT0xVTU40CQkiR2XkbmRlcnQiCglJRFNfU0hWX0NPTFVNTjUJCSJBdHRyaWJ1dGUiCglJRFNfU0hWX0NPTFVNTjYJCSJHZXNhbXRncvbfZSIKCUlEU19TSFZfQ09MVU1ONwkJIkZyZWllciBTcGVpY2hlciIKCUlEU19TSFZfQ09MVU1OOAkJIk5hbWUiCglJRFNfU0hWX0NPTFVNTjkJCSJLb21tZW50YXIiCkVORAoKLyogbWVzc2FnZSBib3ggc3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CiAgICAgICBJRFNfUkVTVEFSVF9USVRMRSAgICAgICAiTmV1c3RhcnRlbiIKICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJN9mNodGVuIFNpZSwgZGFzcyBlaW4gc2ltdWxpZXJ0ZXIgV2luZG93cyBOZXVzdGFydCBkdXJjaGdlZvxocnQgd2lyZCA/IgogICAgICAgSURTX1NIVVRET1dOX1RJVExFICAgICAgIkFuaGFsdGVuIgogICAgICAgSURTX1NIVVRET1dOX1BST01QVCAgICAgIk32Y2h0ZW4gU2llIGRpZSBha3R1ZWxsZSBXaW5lIFNpdHp1bmcgYmVlbmRlbiA/Igp9Cg==