LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIFdvcmRwYWQKICoKICogQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhc2ljaUBsaW51eC1zZXZlbmxlci5vcmc+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCkxBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCgpNQUlOTUVOVSBNRU5VIERJU0NBUkRBQkxFIApCRUdJTgogICAgUE9QVVAgIiZEb3N5YSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZZZW5pXHRDdHJsK04iLCAgICAgICAgIElEX0ZJTEVfTkVXCiAgICAgICAgTUVOVUlURU0gIiZB5y4uLlx0Q3RybCtPIiwgICAgICAgIElEX0ZJTEVfT1BFTgogICAgICAgIE1FTlVJVEVNICImS2F5ZGV0XHRDdHJsK1MiLCAgICAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSAiJkZhcmts/SBLYXlkZXQuLi4iLCAgICAgSURfRklMRV9TQVZFQVMKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJsf9ayIsICAgICAgICAgIElEX0ZJTEVfRVhJVAogICAgRU5ECiAgICBQT1BVUCAiJkT8emVuIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkdlcmkgQWxcdEN0cmwrWiIsICAgICAgICAgICAgSURfRURJVF9VTkRPCiAgICAgICAgTUVOVUlURU0gIiZZaW5lbGVcdEN0cmwrWSIsICAgICAgICAgICAgIElEX0VESVRfUkVETwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICJLZSZzXHRDdHJsK1giLCAgICAgICAgICAgICAgICBJRF9FRElUX0NVVAogICAgICAgIE1FTlVJVEVNICImS29weWFsYVx0Q3RybCtDIiwgICAgICAgICAgICBJRF9FRElUX0NPUFkKICAgICAgICBNRU5VSVRFTSAiWWEmcP3+dP1yXHRDdHJsK1YiLCAgICAgICAgICAgSURfRURJVF9QQVNURQogICAgICAgIE1FTlVJVEVNICImU2lsXHREZWwiLCAgICAgICAgICAgICAgICAgICBJRF9FRElUX0NMRUFSCiAgICAgICAgTUVOVUlURU0gIiZU/G38bvwgc2XnXHRDdHJsK0EiLCAgICAgICAgIElEX0VESVRfU0VMRUNUQUxMCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIiZGaW5kIC4gLiAuXHRDcnRsK0YiLCAgICAgICAgIElEX0ZJTkQKICAgICAgICBNRU5VSVRFTSAiRmluZCAmbmV4dFx0RjMiLCAgICAgICAgICAgICAgSURfRklORF9ORVhUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIlNhbHQtJm9rdW51ciIsICAgICAgICAgICAgICAgIElEX0VESVRfUkVBRE9OTFkKICAgICAgICBNRU5VSVRFTSAiJkRl8Gn+bWn+IiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRklFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIFBPUFVQICJEJmnwZXJsZXJpIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICJTZedpbSAmYmlsZ2lzaSIsICAgICAgICAgICAgICBJRF9FRElUX1NFTEVDVElPTklORk8KICAgICAgICAgICAgTUVOVUlURU0gIkthcmFrdGVyIGJpJudpbWkiLCAgICAgICAgICAgIElEX0VESVRfQ0hBUkZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJtZudGFu/W1s/SBrYXIuIGJp52ltaSIsICAgICAgSURfRURJVF9ERUZDSEFSRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICJQYXJhZ3JhJmYgYmnnaW1pIiwgICAgICAgICAgICBJRF9FRElUX1BBUkFGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIiZNZXRuaSBhbCIsICAgICAgICAgICAgICAgICAgIElEX0VESVRfR0VUVEVYVAogICAgICAgIEVORAogICAgRU5ECiAgICBQT1BVUCAiJlZpZXciCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImVG9vbGJhciIsICAgICAgICBJRF9UT0dHTEVfVE9PTEJBUgogICAgICAgIE1FTlVJVEVNICImRm9ybWF0YmFyIiwgICAgICBJRF9UT0dHTEVfRk9STUFUQkFSCiAgICAgICAgTUVOVUlURU0gIiZTdGF0dXNiYXIiLCAgICAgIElEX1RPR0dMRV9TVEFUVVNCQVIKICAgIEVORAogICAgUE9QVVAgIiZJbnNlcnQiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICImRGF0ZSBhbmQgdGltZSAuIC4gLiIsICBJRF9EQVRFVElNRQogICAgRU5ECiAgICBQT1BVUCAiJkJp52ltIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAiJkJ1bGxldCBwb2ludHMiICAgICAgICAgICAgICAgIElEX0JVTExFVAogICAgICAgIFBPUFVQICImQXJrYXBsYW4iCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlMmaXN0ZW1cdEN0cmwrMSIsICAgICAgICAgSURfQkFDS18xCiAgICAgICAgICAgIE1FTlVJVEVNICImU2Fy/W10/XJha1x0Q3RybCsyIiwgICAgIElEX0JBQ0tfMgogICAgICAgIEVORAogICAgICAgIFBPUFVQICImSGl6YWxhbWEiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIlMmb2xcdEN0cmwrTCIsICAgICAgICAgIElEX0FMSUdOX0xFRlQKICAgICAgICAgICAgTUVOVUlURU0gIk8mcnRhXHRDdHJsK0UiLCAgICAgICAgIElEX0FMSUdOX0NFTlRFUgogICAgICAgICAgICBNRU5VSVRFTSAiUyZh8Fx0Q3RybCtSIiwgICAgICAgICAgSURfQUxJR05fUklHSFQKICAgICAgICBFTkQKICAgIEVORApFTkQKCklERF9EQVRFVElNRSBESUFMT0cgRElTQ0FSREFCTEUgMzAsIDIwLCAxMzAsIDgwClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEYXRlIGFuZCB0aW1lIgpGT05UIDEwLCAiTVMgU2FucyBTZXJpZiIKQkVHSU4KICAgIExURVhUICAgICAgICAiQXZhaWxhYmxlIGZvcm1hdHMiLDAsMywyLDEwMCwxNQogICAgTElTVEJPWCAgICAgIElEQ19EQVRFVElNRSwzLDEyLDgwLDY1LExCU19OT0lOVEVHUkFMSEVJR0hUCiAgICBQVVNIQlVUVE9OICAgIiZPSyIsSURPSyw4NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICImQ2FuY2VsIixJRENBTkNFTCw4NywyNiw0MCwxMgpFTkQKCklERF9ORVdGSUxFIERJQUxPRyBESVNDQVJEQUJMRSAzMCwgMjAsIDE0MCwgODAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIk5ldyIKRk9OVCAxMCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgIk5ldyBkb2N1bWVudCB0eXBlIiwwLDMsMiwxMDAsMTUKICAgIExJU1RCT1ggICAgICBJRENfTkVXRklMRSwzLDEyLDkwLDY1LExCU19OT0lOVEVHUkFMSEVJR0hUCiAgICBQVVNIQlVUVE9OICAgIiZPSyIsSURPSyw5NywxMiw0MCwxMgogICAgUFVTSEJVVFRPTiAgICImQ2FuY2VsIixJRENBTkNFTCw5NywyNiw0MCwxMgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBTVFJJTkdfUklDSFRFWFRfRklMRVNfUlRGLCAgICAgIlJpY2ggdGV4dCBmb3JtYXQgKCoucnRmKSIKICAgIFNUUklOR19URVhUX0ZJTEVTX1RYVCwgICAgICAgICAiVGV4dCBkb2N1bWVudHMgKCoudHh0KSIKICAgIFNUUklOR19URVhUX0ZJTEVTX1VOSUNPREVfVFhULCAiVW5pY29kZSB0ZXh0IGRvY3VtZW50ICgqLnR4dCkiCiAgICBTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgIkFsbCBkb2N1bWVudHMgKCouKikiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19ORVdGSUxFX1JJQ0hURVhULCAgICAgIlJpY2ggdGV4dCBkb2N1bWVudCIKICAgIFNUUklOR19ORVdGSUxFX1RYVCwgICAgICAgICAgIlRleHQgZG9jdW1lbnQiCiAgICBTVFJJTkdfTkVXRklMRV9UWFRfVU5JQ09ERSwgICJVbmljb2RlIHRleHQgZG9jdW1lbnQiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFNUUklOR19ERUZBVUxUX0ZJTEVOQU1FLCAgICAgIkRvY3VtZW50IgogICAgU1RSSU5HX1BST01QVF9TQVZFX0NIQU5HRVMsICAiU2F2ZSBjaGFuZ2VzIHRvICclcyc/IgogICAgU1RSSU5HX1NFQVJDSF9GSU5JU0hFRCwgICAgICAiRmluaXNoZWQgc2VhcmNoaW5nIHRoZSBkb2N1bWVudC4iCiAgICBTVFJJTkdfTE9BRF9SSUNIRURfRkFJTEVELCAgICJGYWlsZWQgdG8gbG9hZCB0aGUgUmljaEVkaXQgbGlicmFyeS4iCiAgICBTVFJJTkdfU0FWRV9MT1NFRk9STUFUVElORywgICJZb3UgaGF2ZSBjaG9zZW4gdG8gc2F2ZSBpbiBwbGFpbiB0ZXh0IGZvcm1hdCwgIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGljaCB3aWxsIGNhdXNlIGFsbCBmb3JtYXR0aW5nIHRvIGJlIGxvc3QuICIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdpc2ggdG8gZG8gdGhpcz8iCkVORAo=