LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzIE1hcmNlbG8gRHVhcnRlCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ERUZBVUxUCgpNRU5VXzAwMSBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglNRU5VSVRFTSAizWNvbmVzICZncmFuZGVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICLNY29uZXMgJnBlcXVlbm9zIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0YWxoZXMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCIiCglCRUdJTgoJICBQT1BVUCAiJkV4aWJpciIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAizWNvbmVzICZncmFuZGVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAizWNvbmVzICZwZXF1ZW5vcyIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImRGV0YWxoZXMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJPJnJnYW5pemFyIO1jb25lcyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUG9yICZub21lIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJQb3IgJnRpcG8iLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBvciB0YSZtYW5obyIsCTB4MzEJLyogLi4uICovCgkgICAgTUVOVUlURU0gIlBvciAmZGF0YSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiQXV0byBvcmdhbmkmemFyIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiQWxpbiZoYXIg7WNvbmVzIiwJRkNJRE1fU0hWSUVXX1NOQVBUT0dSSUQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImQXR1YWxpemFyIiwJCUZDSURNX1NIVklFV19SRUZSRVNICgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQ28mbGFyIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkNvbGFyIGEmdGFsaG8iLAlGQ0lETV9TSFZJRVdfSU5TRVJUTElOSwoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgUE9QVVAgIk5vdm8iCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZQYXN0YSIsCUZDSURNX1NIVklFV19ORVdGT0xERVIKCSAgICBNRU5VSVRFTSAiJkF0YWxobyIsCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlByb3ByaWVkYWRlcyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgovKgogc2hlbGx2aWV3IGl0ZW0gbWVudQoqLwpNRU5VX1NIVl9GSUxFIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KCVBPUFVQIiIKCUJFR0lOCgkgIE1FTlVJVEVNICImRXhwbG9yYXIiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIkEmYnJpciIsCQlGQ0lETV9TSFZJRVdfT1BFTgoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkMmb3J0YXIiLAkJRkNJRE1fU0hWSUVXX0NVVAoJICBNRU5VSVRFTSAiJkNvcGlhciIsCQlGQ0lETV9TSFZJRVdfQ09QWQoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIkNyaWFyIGEmdGFsaG8iLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiRSZ4Y2x1aXIiLAkJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiJlJlbm9tZWFyIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImUHJvcHJpZWRhZGVzIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKClNIQlJTRk9SRk9MREVSX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDE4OCwgMTkyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVSB8IERTX01PREFMRlJBTUUgfCBEU19TRVRGT05UIHwgRFNfM0RMT09LCkNBUFRJT04gIlByb2N1cmFyIHBhc3RhIgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJTb2JyZSAlcyIKRk9OVCAxMCwgIk1TIFNoZWxsIERsZyIKewogREVGUFVTSEJVVFRPTiAiT0siLCBJRE9LLCAxNTMsIDEzMCwgNTAsIDEyCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDE4OSwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgOCwgMTAsIDEzNywgMzMKIExURVhUICJXaW5lIGZvaSBkaXNwb25pYmlsaXphZG8gcG9yOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CiBJQ09OICIiLCAxMjI5NywgNywgMTEsIDE4LCAyMCwgV1NfVklTSUJMRQogTFRFWFQgIkRpZ2l0ZSBvIG5vbWUgZG8gcHJvZ3JhbWEsIHBhc3RhLCBkb2N1bWVudG8sIG91IGVuZGVyZedvIEludGVybmV0LCBxdWUgbyBXaW5lIGly4SBhYnLtLWxvIHBhcmEgdm9j6i4iLCAxMjI4OSwgMzYsIDExLCAxODIsIDE4CiBMVEVYVCAiJkFicmlyOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJDYW5jZWxhciIsIElEQ0FOQ0VMLCAxMTYsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIiZQcm9jdXJhci4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIsFyZWEgZGUgdHJhYmFsaG8iCglJRFNfTVlDT01QVVRFUgkJIk1ldSBjb21wdXRhZG9yIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIs1jb25lcyAmZ3JhbmRlcyIKCUlEU19WSUVXX1NNQUxMCQkizWNvbmVzICZwZXF1ZW5vcyIKCUlEU19WSUVXX0xJU1QJCSImTGlzdGEiCglJRFNfVklFV19ERVRBSUxTCSImRGV0YWxoZXMiCglJRFNfU0VMRUNUCQkiU2VsZWNpb25hciIKCUlEU19PUEVOCQkiQWJyaXIiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJO428gcG9kZSBjcmlhciBub3ZhIHBhc3RhOiBQZXJtaXNz428gbmVnYWRhLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiRXJybyBkdXJhbnRlIGEgY3JpYefjbyBkYSBub3ZhIHBhc3RhIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiQ29uZmlybWFyIGV4Y2x1c+NvIGRlIGFycXVpdm8iCglJRFNfREVMRVRFRk9MREVSX0NBUFRJT04gIkNvbmZpcm1hciBleGNsdXPjbyBkZSBwYXN0YSIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIlZvY+ogdGVtIGNlcnRlemEgcXVlIGRlc2VqYSBleGNsdWlyICclMSc/IgoJSURTX0RFTEVURU1VTFRJUExFX1RFWFQgIlZvY+ogdGVtIGNlcnRlemEgcXVlIGRlc2VqYSBleGNsdWlyIGVzdGVzICUxIGl0ZW5zPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIlNvYnJlZXNjcmV2ZXIgYXJxdWl2byAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJDb25maXJtYXIgc29icmVlc2NyZXZlciBhcnF1aXZvIgp9CgovKgljb2x1bmFzIG5vIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xCQkiQXJxdWl2byIKCUlEU19TSFZfQ09MVU1OMgkJIlRhbWFuaG8iCglJRFNfU0hWX0NPTFVNTjMJCSJUaXBvIgoJSURTX1NIVl9DT0xVTU40CQkiTW9kaWZpY2FkbyIKCUlEU19TSFZfQ09MVU1ONQkJIkF0cmlidXRvcyIKCUlEU19TSFZfQ09MVU1ONgkJIlRhbWFuaG8iCglJRFNfU0hWX0NPTFVNTjcJCSJEaXNwb27tdmVsIgoJSURTX1NIVl9DT0xVTU44CQkiTm9tZSIKCUlEU19TSFZfQ09MVU1OOQkJIkNvbWVudOFyaW9zIgpFTkQKCi8qIG1lc3NhZ2UgYm94IHN0cmluZ3MgKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewogICAgICAgSURTX1JFU1RBUlRfVElUTEUgICAgICAgIlJlaW5pY2lhciIKICAgICAgIElEU19SRVNUQVJUX1BST01QVCAgICAgICJWb2PqIHF1ZXIgc2ltdWxhciBhIHJlaW5pY2lhbGl6YefjbyBkbyBXaW5kb3dzPyIKICAgICAgIElEU19TSFVURE9XTl9USVRMRSAgICAgICJEZXNsaWdhciIKICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJWb2PqIHF1ZXIgZmluYWxpemFyIGEgc2Vzc+NvIG5vIFdpbmU/Igp9Cg==